1. Technical Field
The present invention is related to computer-aided software engineering (CASE) tools for collaborative software development.
2. Description of Related Art
“Software engineering” is the practice of software development as an industrial discipline. The goal of Software Engineering is to produce high-quality, maintainable software through an efficient use of development resources.
Most commercially-developed software is developed by teams of programmers. Very large software projects may require a large number of programmers or a large number of teams of programmers. One area of particular interest to Software Engineering is the interaction between members of a programming team and between programmers and management.
Conventional Software Engineering wisdom suggests that the task of producing a software product is best practiced by conceptualizing the product as a system of interrelated components, dividing the components among members of a programming team, having team members work in parallel to produce the components, and assembling the components into a working system. In other words, conventional wisdom suggests a “divide-and-conquer” approach to software development.
D. B. Simmons, “Communications: a software group productivity dominator,” IEEE Software Engineering Journal, November 1991, pp. 454-462, for example, takes the position that a system design that is poorly partitioned will result in a large amount of inter-programmer communication to resolve dependency issues, which ultimately degrades productivity. In an ideal divide-and-conquer situation, inter-programmer communication should be unnecessary, so any time spent communicating, rather than on writing source lines of code (SLOC), degrades productivity. Simmons thus advocates employing careful system design and small team sizes to minimize communication between programmers, the ultimate goal being to approach an ideal “divide-and-conquer” scenario.
A dramatically different approach to inter-programmer communication can be found in the increasingly popular Software Engineering methodology known as “extreme Programming” (XP), which was founded by Ken Beck. XP is based on team collaboration on all phases of a software development project, rather than a pure divide-and-conquer approach. XP emphasizes continuous communication between members of a programming team, with the theory being that when all members of a team are familiar with the project as a whole, a project design can evolve as needed to resolve whatever issues may arise during the implementation phase of a project, such as dependency and integration issues. Thus, the XP methodology includes such concepts as common code ownership, in which all team members are allowed to work on any portion of the project.
Although divide-and-conquer and XP represent two very different approaches to software development, these two methodologies highlight the significant role that inter-programmer communication plays in a large software project. Two overarching principles come to mind: First, communication between team members is essential, because in a practical setting, dependency and integration issues between different programmers' work will invariably arise. Second, it is important to productivity that communication between team members is efficient. A design that is well-planned (as advocated in Simmons' article) or at least well-understood (as advocated in XP), can help in this respect.
Computer-Aided Software Engineering (CASE) is the sub-field of Software Engineering that is concerned with developing software tools (called “CASE tools”) for making software development more efficient and less error-prone. A number of existing CASE technologies are directed to problems relating to team software development, including communication between developers. Several of these are discussed below.
A number of configuration management tools exist in the art. Configuration management tools allow different versions (configurations) of a file to be maintained, so that a permanent copy of an earlier version of a file under modification can be maintained. These kinds of tools are very helpful in software development for maintaining different versions of source code files under development, because working or “stable” versions of source code files can be maintained while newer versions are being developed. Many configuration management tools also allow a “snapshot” of a group of source files to be made, so that a particular point in time of an entire software development project may be recorded.
Most modern configuration management tools also allow multiple users to “check out” files and “check in” modified versions of files, to ensure consistency of file versions for multiple users. Generally, a configuration management tool will keep a “log” so that comments regarding the changes made between versions can be recorded. Some configuration management tools, such as the open-source Concurrent Versioning System (CVS), allow for distributed access to a group of source files (i.e., they allow developers to access the files from remote computers on a network, such as the Internet). Revision Control System (RCS) is another popular open-source configuration management tool.
Some existing tools provide more extensive features for collaborative programming than do simple configuration management systems. Some of these tools are network- or World-wide web-based. For example, SOURCEFORGE™ is a trademark for a collaborative software development system produced by VA Software Corporation of Fremont, Calif. The SOURCEFORGE™ collaborative software development system is used by a number of organizations to support collaborative software development on organizational intranets using a web-based interface. The SOURCEFORGE™ collaborative software development system also forms the basis for “SOURCEFORGE™.net,” which is reportedly the world's largest open-source development website.
Open-source software, particularly in recent times, is often a collaborative product of multiple developers working in remote locations over the Internet. The open-source Linux operating system, for example, was created by Linus Torvalds (for whom Linux is named) in Finland. Many enhancements to Linux, such as device drivers, have been contributed by programmers worldwide through the Internet.
SOURCEFORGE™.net supports a number of features that are conducive to collaborative programming over a wide-area network (WAN), such as the Internet. On SOURCEFORGE™.net, each open-source programming project is given a web page that includes a number of communication features for communicating with developers and users of open-source software products. “Trackers” are provided to allow users or developers to report bugs, request new features to be added to a program, or request technical support. Other, more general discussion forums, including a public message forum, mailing lists, and a news archive are also provided. A task manager application is provided for project planning and delegation of tasks among developers. Source code or binary releases of a software product may be downloaded from that product's SOURCEFORGE™.net page or from one of a number of mirror sites.
A developer (or user, for that matter) may also use the CVS configuration management system to “mount” to the project's code repository and download any version of the source code (including the latest “under development” sources). CVS may also be used by a developer having appropriate privileges to check out or check in source code files for inclusion in the project. SOURCEFORGE™.net also includes a “compile farm” for compiling and testing software on various platforms (e.g., that a particular developer might not have access to, otherwise).
Most computer languages have some facility for leaving (non-executable) comments in program code. For example, in the “C” programming language, comments are written between “slash-star” and “star-slash” delimiters (e.g., /* comment */). Some programming languages allow for more advanced commenting features. The JAVA™ programming language (a trademark of Sun Microsystems, Inc.) allows special “javadoc” comments that can be associated with particular classes, fields, or methods in a JAVA™ programming language source file. “javadoc” comments may include special tags to provide program documentation in a structured format. A tool, called “javadoc,” is provided in Sun Microsystems' JAVA™ 2 Software Development Kit (J2SDK), which can compile the javadoc comments into specially-formatted Hypertext Markup Language (HTML) source for display in a web browser. The open-source Perl programming language version 5 (Perl 5), developed by Larry Wall, includes a similar feature to javadoc, called “POD,” which stands for “plain old documentation.”
The open-source Python programming language, developed by Guido van Rossum, includes a feature known as “doc strings.” “Doc strings” are special strings, denoted by triple quotation marks, that are used to describe particular objects or functions in Python. Unlike ordinary comments, however, “doc strings” are available to a Python program at run-time. Because Python has an interactive mode to allow code to be entered and executed at an interpreter prompt, the ability to read program comments at run-time is particularly valuable in Python.
Literate programming is a programming methodology originated by Turing Award winner Prof. Donald Knuth of Stanford University. Literate programming is based on the idea that well-written program code should be written to be read by others. Knuth created the WEB programming system for literate programming in Pascal. WEB allows a programmer to write code in sections, in which each section contains a descriptive subsection for entering a natural language description of a portion of code, a macro section for defining macros, and a code section for entering Pascal code. The macro features of WEB allow a programmer to write code for presentation to a reader in any particular order.
WEB is made up of two programs, TANGLE and WEAVE, each of which processes a WEB source file. WEAVE formats the text documentation and pretty-prints the code in a format suitable for processing by Knuth's typesetting program TeX (which, incidentally, was written using WEB). TANGLE, on the other hand, removes the text documentation and performs macro substitutions to arrive at source code suitable for compilation by a Pascal compiler.
A number of literate programming tools have been developed for other languages. Some of these are patterned after Knuth's original WEB program, such as CWEB for literate programming in C, and FWEB for literate programming in Fortran. A number of language-independent literate programming tools are also available.
Thus, configuration management tools aid in the management of team programming projects by providing some degree of concurrency control and transaction management (in the database-management sense), and advanced documentation features, such as are provided in literate programming tools, make program code easier for others to understand. Both of these CASE technologies are a boon to software developers and software development teams, because they help developers collaborate effectively to manage complexity. In very large software projects, however, the process of collaborating itself may become quite complex.
Whether one views inter-developer communication as an unavoidable and necessary evil or as something to be encouraged the fact remains that communication needs to be efficient and effective. If too much information is exchanged, information overload can result and productivity and quality are compromised. On the other hand, when information is less freely exchanged, the process of acquiring and disseminating necessary information may become inefficient.
There is a need, then, for an efficient form of information exchange between software developers working on a common project.